
//
///*    
//1.增加IO初始化 数据口 OD +上拉
//2.增加文件到工程
//3.
//*/
////#include "stm32f0xx_hal.h"
//#include "Public.h"
//
//#define A_CLK_GPIO_Port   GPIOB
//#define A_CLK_Pin         GPIO_Pin_6 
//
//#define A_DIO_GPIO_Port   GPIOB
//#define A_DIO_Pin         GPIO_Pin_7
//
//
//
//#define A_CLK_H   GPIO_WriteBit( A_CLK_GPIO_Port, A_CLK_Pin,Bit_SET )
//#define A_CLK_L   GPIO_WriteBit( A_CLK_GPIO_Port, A_CLK_Pin,Bit_RESET )
//
//#define A_DIO_H   GPIO_WriteBit( A_DIO_GPIO_Port, A_DIO_Pin,Bit_SET )
//#define A_DIO_L   GPIO_WriteBit( A_DIO_GPIO_Port, A_DIO_Pin,Bit_RESET )
//
//#define A_DIO      GPIO_ReadInputDataBit( A_DIO_GPIO_Port, A_DIO_Pin  )
//
//
//#include "si5351a.h"
//
//
//
//
//void IICstart()//IIC总线起始信号
//{
//  A_DIO_H;
//  A_CLK_H;
//  A_DIO_L;
//  Delay_us(2); 
//  A_CLK_L;
//  Delay_us(2);
//}
//void IICstop()//IIC总线停止信号
//{
//  A_CLK_L;
//  Delay_us(2); 
//  A_DIO_L;
//  Delay_us(2); 
//  A_CLK_H;
//  Delay_us(2); 
//  A_DIO_H;	
//  Delay_us(2); 
//}
//void IICsend(u8 DATA)//IIC总线发送信数据
//{
//  u16 i;
//  for(i=0;i<8;i++) //发送一个字节数据 
//  {     
//    A_CLK_L; 		 //拉低时钟线，准备开始给SDA赋值
//                    
//    if((DATA&0x80)==0)  
//    {A_DIO_L;}  
//    else  
//    {A_DIO_H;}  
//                            
//    DATA<<=1;  
//    Delay_us(2);    
//    A_CLK_H;
//    Delay_us(2);      //等待从设备把数据接收完
//  }  
//  A_CLK_L;  
//  A_DIO_H;	 				   //释放数据线   
//  Delay_us(2);   
//  A_CLK_H; 
//  Delay_us(2); 
//  while(i<50){i++;}//等待从设备应答ACK 
//  A_CLK_L; 					 //释放时钟线，为下次操作做准备
//}
//void IICsendreg(uint8_t reg, uint8_t data)
//{
//  IICstart();      //起始信号
//  Delay_us(5);  
//  IICsend(0xC0);   //发送设备地址+写信号
//  Delay_us(5);  
//  IICsend(reg);    //内部寄存器地址
//  Delay_us(5);  
//  IICsend(data);   //内部寄存器数据
//  Delay_us(5);  
//  IICstop(); 
//}
//
//
//
//
//
//void init_Frequency(uint32_t frequency)//设置时钟频率
//{
////  u32 pllFreq;
////  u32 xtalFreq = XTAL_FREQ;// 晶体频率
////  u32 l;
//  float f;
//  u16 mult;
//  u32 num;
//  u32 denom;
//  u32 divider;
//
//
//////------------15k-20K----------------------------------------- 
////  divider = 146;
////  
////  f= frequency*1254-33495195; //(1,253.764 x - 33,495,195 ) *16  
//////------------------------------------------------------------
////
//////------------21k-43K----------------------------------------- 
////  divider = 82;
////  
////  f= frequency*705-33762066; //(1,253.764 x - 33,495,195 ) *16  
//////------------------------------------------------------------ 
//  
//
//  divider = 146;
//  
//  f= frequency*1254-33495195; //(1,253.764 x - 33,495,195 ) *16
//  
//  mult = (u32)(f /65536);
//
//  f =f-mult*65536;
//  
//  num = (u32)(f*16 );
//  
//  denom=1048575;
//  
//  
//																		//设置锁相环与倍增系数计算
//  SetPLLClk(SI_SYNTH_PLL_A, mult, num, denom);
//		//设置MultiSynth分配器0分计算。
//		//最后R分裂阶段可以除以2的幂,从1 . . 128。
//		//由常量SI_R_DIV1 reprented SI_R_DIV128(见si5351a。h头文件)
//		//如果你想在1兆赫兹以下输出,你必须使用
//		//最后R分裂阶段
//
//  SetMultisynth(SI_SYNTH_MS_0,divider,SI_R_DIV_128);
//		//重置锁相环。这将导致输出的故障。对于小的变化
//		//参数,不需要复位锁相环,没有故障
//
////  IICsendreg(SI_PLL_RESET,0xA0);	
//		//最后打开CLK0输出(0 x4f)
//		//并设置MultiSynth0是锁相环的输入
//  IICsendreg(SI_CLK0_CONTROL, 0x4F|SI_CLK_SRC_PLL_A);
//}
//
//
//
//
//void SetFrequency(uint32_t frequency)//设置时钟频率
//{
////  u32 pllFreq;
////  u32 xtalFreq = XTAL_FREQ;// 晶体频率
////  u32 l;
//  float f;
//  u16 mult;
//  u32 num;
//  u32 denom;
////  u32 divider;
//
//  
//  
//  
//  
////  divider = 750000000 / frequency; 	//锁相环频率:900 mhz
////  if (divider % 2) divider--;				//确保一个更整数除法比率
////  pllFreq = divider * frequency;		//计算pllFrequency:分频器*所需的输出频率
////  mult = pllFreq / xtalFreq;				//确定所需的pllFrequency的乘数
////  l = pllFreq % xtalFreq;				//它有三个部分:
////  f = l;						//乘是一个整数,必须在15 . . 90
////  f *= 1048575;						//num和分母项是小数部分,分子和分母
////  f /= xtalFreq;					//每20位(范围0 . . 1048575)
////  num = f;						//实际的乘数是乘+ num /分母项
////  denom = 1048575;//为简单起见我们将分母最大1048575
////  
//  
//////------------15k-20K----------------------------------------- 
////  divider = 146;
////  
////  f= frequency*1254-33495195; //(1,253.764 x - 33,495,195 ) *16  
//////------------------------------------------------------------
////
//////------------21k-43K----------------------------------------- 
////  divider = 82;
////  
////  f= frequency*705-33762066; //(1,253.764 x - 33,495,195 ) *16  
//////------------------------------------------------------------  
//  
//  
////  divider = 146;
//  
//  f= frequency*1254-33495195; //(1,253.764 x - 33,495,195 ) *16
//  
//  mult = (u32)(f /65536);
//
//  f =f-mult*65536;
//  
//  num = (u32)(f*16 );
//  
//  denom=1048575;
//  
//  
//																		//设置锁相环与倍增系数计算
//  SetPLLClk(SI_SYNTH_PLL_A, mult, num, denom);
//		//设置MultiSynth分配器0分计算。
//		//最后R分裂阶段可以除以2的幂,从1 . . 128。
//		//由常量SI_R_DIV1 reprented SI_R_DIV128(见si5351a。h头文件)
//		//如果你想在1兆赫兹以下输出,你必须使用
//		//最后R分裂阶段
//
////  SetMultisynth(SI_SYNTH_MS_0,divider,SI_R_DIV_128);
//		//重置锁相环。这将导致输出的故障。对于小的变化
//		//参数,不需要复位锁相环,没有故障
//
////  IICsendreg(SI_PLL_RESET,0xA0);	
//		//最后打开CLK0输出(0 x4f)
//		//并设置MultiSynth0是锁相环的输入
////  IICsendreg(SI_CLK0_CONTROL, 0x4F|SI_CLK_SRC_PLL_A);
//}
//void SetPLLClk(uint8_t pll, uint16_t mult, uint32_t num, uint32_t denom)//设置PPL时钟
//{
//  uint32_t P1;					// PLL config register P1
//  uint32_t P2;					// PLL config register P2
//  uint32_t P3;					// PLL config register P3
//
////  P1 = (uint32_t)(128 * ((float)num / (float)denom));
////  P1 = (uint32_t)(128 * (uint32_t)(mult) + P1 - 512);
////  P2 = (uint32_t)(128 * ((float)num / (float)denom));
////  P2 = (uint32_t)(128 * num - denom * P2);
////  P3 = denom;
//
//  P1 = mult;
//  P2 = num;
//  P3 = denom;
//  
//
//  IICsendreg(pll + 0, (P3 & 0x0000FF00) >> 8);
//  IICsendreg(pll + 1, (P3 & 0x000000FF));
//  IICsendreg(pll + 2, (P1 & 0x00030000) >> 16);
//  IICsendreg(pll + 3, (P1 & 0x0000FF00) >> 8);
//  IICsendreg(pll + 4, (P1 & 0x000000FF));
//  IICsendreg(pll + 5, ((P3 & 0x000F0000) >> 12) | ((P2 & 0x000F0000) >> 16));
//  IICsendreg(pll + 6, (P2 & 0x0000FF00) >> 8);
//  IICsendreg(pll + 7, (P2 & 0x000000FF));
//}
//void SetMultisynth(uint8_t synth,uint32_t divider,uint8_t rDiv)//设置多synth
//{
//  uint32_t P1;					// Synth config register P1
//  uint32_t P2;					// Synth config register P2
//  uint32_t P3;					// Synth config register P3
//
//  P1 = 128 * divider - 512;
//  P2 = 0;							// P2 = 0, P3 = 1 forces an integer value for the divider
//  P3 = 1;
//
//  IICsendreg(synth + 0,   (P3 & 0x0000FF00) >> 8);
//  IICsendreg(synth + 1,   (P3 & 0x000000FF));
//  IICsendreg(synth + 2,   ((P1 & 0x00030000) >> 16) | rDiv);
//  IICsendreg(synth + 3,   (P1 & 0x0000FF00) >> 8);
//  IICsendreg(synth + 4,   (P1 & 0x000000FF));
//  IICsendreg(synth + 5,   ((P3 & 0x000F0000) >> 12) | ((P2 & 0x000F0000) >> 16));
//  IICsendreg(synth + 6,   (P2 & 0x0000FF00) >> 8);
//  IICsendreg(synth + 7,   (P2 & 0x000000FF));
//}
//
//
//
//
// 